开始之前:
1. 识别人脸输出数据
在人脸识别功能下,当人脸出现在HUSKYLENS 2 屏幕中时,可以被检测和框出,我们可以获取HUSKYLENS 2 画面中离十字光标最近的人脸的相关数据并在串口打印出来,可以读取的人脸数据有:人脸ID、人脸名称、宽度、高度以及人脸中心点的X坐标位置和Y坐标位置。
I2C模式 示例程序如下。
#include "DFRobot_HuskylensV2.h"
// 创建对象
HuskylensV2 huskylens;
// 主程序开始
void setup() {
Serial.begin(9600);
Wire.begin();
while (!huskylens.begin(Wire)) {
delay(100);
}
huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION);
}
void loop() {
huskylens.getResult(ALGORITHM_FACE_RECOGNITION);
if ((huskylens.available(ALGORITHM_FACE_RECOGNITION))) {
Serial.println((String("人脸的ID") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)))));
Serial.println((String("人脸名称") + String((RET_ITEM_STR(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, name)))));
Serial.println((String("人脸中心点坐标") + String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, xCenter))) + String((String(",") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, yCenter)))))))));
Serial.println((String("人脸宽") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, width)))));
Serial.println((String("人脸高") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, height)))));
delay(500);
}
}
UART模式 示例程序如下。后续示例代码将仅提供I2C模式代码,如需使用UART模式,请仿照setup()中初始化的方式修改代码即可。
#include "SoftwareSerial.h"
#include "DFRobot_HuskylensV2.h"
// 创建对象
HuskylensV2 huskylens;
SoftwareSerial Serial1(2, 3);
// 主程序开始
void setup() {
delay(1000);
Serial1.begin(9600);
while (!huskylens.begin(Serial1)) {
delay(100);
}
huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION);
}
void loop() {
huskylens.getResult(ALGORITHM_FACE_RECOGNITION);
if ((huskylens.available(ALGORITHM_FACE_RECOGNITION))) {
Serial.println((String("人脸的ID") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)))));
Serial.println((String("人脸名称") + String((RET_ITEM_STR(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, name)))));
Serial.println((String("人脸中心点坐标") + String((String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, xCenter))) + String((String(",") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, yCenter)))))))));
Serial.println((String("人脸宽") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, width)))));
Serial.println((String("人脸高") + String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, height)))));
delay(500);
}
}
** 运行结果:**程序上传成功后,HUSKYLENS 2自动切换到人脸识别的功能下如下,对于未学习过的人脸默认输出ID为0。
可以对准一张学习过的人脸,,对于已学习过的人脸输出ID与HUSKYLENS 2 屏幕显示的ID保持一致。
如何学习人脸详细操作请看:人脸识别功能说明
2. 统计人脸数量输出指定数据
当画面中出现多张人脸时,可以使用以下示例程序统计画面中的人脸数量,获取指定ID的人脸相关数据。
示例程序如下
#include "DFRobot_HuskylensV2.h"
// 创建对象
HuskylensV2 huskylens;
// 主程序开始
void setup() {
Serial.begin(9600);
Wire.begin();
while (!huskylens.begin(Wire)) {
delay(100);
}
huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION);
}
void loop() {
huskylens.getResult(ALGORITHM_FACE_RECOGNITION);
if ((huskylens.available(ALGORITHM_FACE_RECOGNITION))) {
Serial.println((String("检测到的人脸数量为:") + String((huskylens.getCachedResultNum(ALGORITHM_FACE_RECOGNITION)))));
}
if (((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1) != NULL))) {
Serial.println((String("ID1人脸的总数") + String((huskylens.getCachedResultNumByID(ALGORITHM_FACE_RECOGNITION, 1)))));
Serial.println((String("ID1人脸的名称") + String((RET_ITEM_STR(huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1), Result, name)))));
Serial.println((String("ID1人脸的中心点坐标") + String((String((RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1), Result, xCenter))) + String((String(",") + String((RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1), Result, yCenter)))))))));
Serial.println((String("ID1人脸的宽") + String((RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1), Result, width)))));
Serial.println((String("ID1人脸的高") + String((RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1), Result, height)))));
}
delay(500);
}
**运行结果:**如下图,运行程序,串口打印当前画面中的人脸数量。当ID为1的人脸出现在画面中就打印输出人脸ID1的相关数据。